package Algoritmo;

import java.util.ArrayList;
import java.util.Scanner;

import neg.Pedido;

public class Algoritmo {
	public static Recorrido resolver(Instancia instancia) {
		Generador generador = new Generador(instancia);
		Recorrido elMejor = null;
		
		for (Recorrido actual : generador.generar())
			if (elMejor == null || actual.distancia() < elMejor.distancia())
				elMejor = actual;
		return elMejor;
	}

	public static ArrayList<Pedido> getMejorRecorrido(ArrayList<Pedido> pedidos) {
		Recorrido optimo = elOptimo(pedidos);
		return deRecorridoALista(optimo, pedidos);
	}


	private static Recorrido elOptimo(ArrayList<Pedido> pedidos) {
		Instancia instancia = new Instancia(pedidos);
		return resolver(instancia);
	}

	@SuppressWarnings("resource")
	private static ArrayList<Pedido> deRecorridoALista(Recorrido elOptimo,
			ArrayList<Pedido> pedidos) {
		ArrayList<Pedido> ret = new ArrayList<Pedido>();
		String fis = elOptimo.toString();
		Scanner scanner = new Scanner(fis);
		while (scanner.hasNextInt())
			ret.add(pedidos.get(scanner.nextInt()));
		return ret;
	}
}
